/*
 * @Author: HeAo
 * @Date: 2022-09-16 10:17:37
 * @LastEditTime: 2022-09-19 10:06:14
 * @LastEditors: HeAo
 * @Description: 
 * @FilePath: \第二阶段\ES6\day04迭代器\3-set.js
 * 别乱动！
 */
/*
set
概念：本身是一个构造函数 成员是唯一的 类似于数组 没有重复的值
作用：1、存储值，成员是唯一的不会重   2、去重
*/

let set = new Set()
// set api
// 1、添加成员
set.add('tom')
set.add('jack') //基本数据类型 不能重复添加
set.add('jack')
set.add([1]) //引用数据类型 地址不同
set.add([1])
console.log(set); //Set(4) { 'tom', 'jack', [ 1 ], [ 1 ] }

// 2、删除成员
set.delete('tom')

// 3、查看set长度 size
console.log(set.size); // 3 删了一个所以是3

// 4、set遍历  keys和values 返回值 都是 值没有区别
console.log(set.keys()); // [Set Iterator] { 'jack', [ 1 ], [ 1 ] }
console.log(set.values()); //[Set Iterator] { 'jack', [ 1 ], [ 1 ] }
console.log(set.entries()); //[Set Entries] {[ 'jack', 'jack' ],[ [ 1 ], [ 1 ] ],[ [ 1 ], [ 1 ] ]}
// 4.1 for遍历
for (let k of set.keys()) {
  console.log(k);
}
// 4.2forEach遍历 
let res = set.forEach((key, value) => {
  console.log(key, value);
});
console.log(res);

// 5、has查看有没有 某一成员
// console.log(set.has('jack')); //true
// console.log(set.has('hello')); //false

// // 6、清空全部set成员
// set.clear()
// console.log(set); //Set(0) {}

// // 7、set应用 set构造函数可以接受数组或者其他可遍历的数据结构
// let set1 = new Set([1, 2, 3, 4, 1, 2, 3, 4]);
// console.log(set1); //Set(4) { 1, 2, 3, 4 }
//7.1数组去重 
// let arr = [1, 2, 3, 5, 3, 2];
// let result = new Set(arr);
// console.log(result); //Set(4) { 1, 2, 3, 5 }
// // 将set集合转换为数组
// let [...arr2] = result;
// console.log(arr2); //[ 1, 2, 3, 5 ]

// // 7.2将字符串转换为数组
// let [...arr1] = 'hello';
// console.log(arr1); //[ 'h', 'e', 'l', 'l', 'o' ]
// //7.3将set集合转换为数组
// let [...arr2] = result;
// console.log(arr2); //[ 1, 2, 3, 5 ]

// // 不用result接收 直接解构
// console.log([...new Set(arr)]) //[ 1, 2, 3, 5 ]